package com.neusoft.io;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

/*
 * 字节流分为字节输入流和字节输出流。
 */
public class TestInputAndOutputStream {
	
   public static void main(String[]args) {
	   //test_inputstream();
	   //test_outputstream();
	   test_InputStreamAndOutStream();
   }
   
   
   /**
    * 字节输入流
	*/
	private static void test_inputstream(){
	   try {
		   //创建文件对象
		   File file0=new File("G:/zcy2017/temp/temp_file01.txt");
		   //创建一个字节输入流的对象
		   InputStream is=new FileInputStream(file0);
		   //读取存储的字节数组
		   byte[] bTemp=null;
		   //读取文件的内容
		   //文件读取结束标志
		   int i=0;
		   do {
			   //每次都要清空临时存储的数组
			   bTemp =new byte[1024];
			   //读取输入流内容
			   i=is.read(bTemp, 0, bTemp.length);
			   //将读取到的内容显示打印
			   String strOut=new String(bTemp);
			   System.out.println(strOut);
		   }while(i!=-1);
		   //关闭资源
		   is.close();
	     } catch (Exception e) {
		       // TODO 自动生成的 catch 块
		       e.printStackTrace();
	      } 
	}
	
	 /**
		 * 字节输出流
		 */
		private static void test_outputstream(){
		   try {
			   //创建输出流的目标文件对象，输出流写出到的目标文件。
			   File file0=new File("G:/zcy2017/temp/temp_file01.txt");
			   //创建一个字节输出流类的对象
			   OutputStream os=new FileOutputStream(file0);
			   //使用输出流输出到文件的内容
			   String strContent="woshitongguoshuchuliushuchudaowenjianzhongdeneirong";
			   //将输出的字符串内容转换为字节数组
			   byte[] bTemp=strContent.getBytes();
			   //读取输入流内容
			   os.write(bTemp);
			   System.out.println("文件写出成功");            			   
			   //关闭资源
			   os.close();
		     } catch (Exception e) {
			       // TODO 自动生成的 catch 块
			       e.printStackTrace();
		      } 
		}
		
		/**
		 * 使用输入流读取一个文件的内容，并使用输出流读取的内容写出到指定的输出文件中
		 */
		private static void test_InputStreamAndOutStream() {
			//创建一个字节输入流的对象
			InputStream is=null;
			//创建一个字节输出流的对象
			OutputStream os=null;
			try {
				//创建输入流的读取的文件对象
				File file0=new File("G:/zcy2017/temp/temp_file01.txt");
				//创建一个字节输入流类的对象
				is=new FileInputStream(file0);
				//创建输出流的目标文件对象，输出流写出到的目标文件
				File file1=new File("G:/zcy2017/temp/2.txt");
				//创建一个字节输出流类的对象
				/*
				 * 构造方法的第二个参数：默认为false，表示写出的内容从文件的开头开始写
				 *                true：表示写出的内容从文件的结尾开始写
				 */
				os =new FileOutputStream(file1,true);
				//先在文件的末尾写一个换行符
				os.write("\n".getBytes());
				//读取存储的字节数组
				byte[] bTemp=new byte[1024];
				//读取文件的内容
				//文件读取结束标志
				//读取输入内容
				int i=is.read(bTemp,0,bTemp.length);
				while(i!=-1) {
					//使用输出流将读取的字节数组内容写出到输出流文件
					os.write(bTemp,0,i);
					//将读取到的内容显示打印
					String strOut=new String(bTemp);
					System.out.println(strOut);
					//进行下一次的读取操作
					//每次都要清空临时存储的数组
					bTemp=new byte[1024];
					//读取输入流内容
					i=is.read(bTemp,0,bTemp.length);
				}
				System.out.println("文件操作完成");
			}catch(Exception e){
				e.printStackTrace();
			}finally {
				//关闭资源
				try {
					if(is!=null){
						is.close();
					}
					if(os!=null){
						os.close();
					}
				}catch(IOException e){
					//异常信息
					System.out.println("关闭文件流资源出现异常："+e.getMessage());
					e.printStackTrace();
				}
			}
		}
}
